package com.naiterui.ehp.bp.domain;

import static javax.persistence.GenerationType.IDENTITY;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * 医生收费标准配置实体
 * @author Amber
 * @since 1.0.0
 */
@Entity
@Table(name = "cms_doctor_charge_config")
public class DrChargeConfig implements Serializable {

    // ------------- 收费业务类型枚举 ----------------- //
    /**
     * 收费业务类型-图文问诊：<code>TYPE_MESSAGE</code>
     */
    public static final int TYPE_MESSAGE = 1;
    /**
     * 收费业务类型-视频问诊：<code>TYPE_VIDEO</code>
     */
    public static final int TYPE_VIDEO = 2;

    /**
     * 字段或域定义：<code>serialVersionUID</code>
     */
    private static final long serialVersionUID = -5656247577238133209L;

    /**
     * 主键：<code>id</code>
     */
    private Long id;
    /**
     * 职级。0医师，1副主任医师，2主任医师，3主治医师，4主院医师：<code>doctorTitle</code>
     */
    private Integer doctorTitle;
    /**
     * 收费类型，1：图文；2：视频问诊 <code>type</code>
     */
    private Integer type;
    /**
     * 默认收费额，单位：分：<code>defaultCharge</code>
     */
    private Integer defaultCharge;
    /**
     * 最低收费额, 单位：分：<code>minCharge</code>
     */
    private Integer minCharge;
    /**
     * 最高收费额，单位：分：<code>maxCharge</code>
     */
    private Integer maxCharge;
    /**
     * 收费计时周期，毫秒值：<code>chargeUnit</code>
     */
    private Long chargePeriod;
    /**
     * 收费周期换算单位：<code>periodUnit</code>
     */
    private Long periodUnit;
    /**
     * 计费描述：<code>chargeDesc</code>
     */
    private String chargeDesc;
    /**
     * 创建时间：<code>createdAt</code>
     */
    private Date createdAt;
    /**
     * 创建人：<code>createdBy</code>
     */
    private String createdBy;
    /**
     * 修改时间：<code>changedAt</code>
     */
    private Date changedAt;
    /**
     * 修改人：<code>changedBy</code>
     */
    private String changedBy;

    public DrChargeConfig() {
    }

    /**
     * 构造函数<P>
     * 提供非空信息
     * @param title
     * @param type
     * @param charge
     * @param minCharge
     * @param maxCharge
     * @param unit
     */
    public DrChargeConfig(int title, int type, int charge, int minCharge, int maxCharge, long unit) {
        this.doctorTitle = title;
        this.type = type;
        this.defaultCharge = charge;
        this.minCharge = minCharge;
        this.maxCharge = maxCharge;
        this.createdAt = new Date();
        this.createdBy = "system";
        this.changedAt = new Date();
        this.changedBy = "system";
    }

    /**
     * @return Long 取得域 id 的方法。
     */
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Long getId() {
        return this.id;
    }

    /**
     * @return Integer 取得域 doctorTitle 的方法。
     */
    @Column(name = "dr_title", nullable = false)
    public Integer getDoctorTitle() {
        return this.doctorTitle;
    }

    /**
     * @param doctorTitle 对域 doctorTitle 的设置方法.
     */
    public void setDoctorTitle(Integer doctorTitle) {
        this.doctorTitle = doctorTitle;
    }

    /**
     * @param id 对域 id 的设置方法.
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * @return Integer 取得域 type 的方法。
     */
    @Column(name = "type", nullable = false)
    public Integer getType() {
        return this.type;
    }

    /**
     * @param type 对域 type 的设置方法.
     */
    public void setType(Integer type) {
        this.type = type;
    }

    /**
     * @return Integer 取得域 defaultCharge 的方法。
     */
    @Column(name = "default_charge", nullable = false)
    public Integer getDefaultCharge() {
        return this.defaultCharge;
    }

    /**
     * @param defaultCharge 对域 defaultCharge 的设置方法.
     */
    public void setDefaultCharge(Integer defaultCharge) {
        this.defaultCharge = defaultCharge;
    }

    /**
     * @return Integer 取得域 minCharge 的方法。
     */
    @Column(name = "min_charge", nullable = false)
    public Integer getMinCharge() {
        return this.minCharge;
    }

    /**
     * @param minCharge 对域 minCharge 的设置方法.
     */
    public void setMinCharge(Integer minCharge) {
        this.minCharge = minCharge;
    }

    /**
     * @return Integer 取得域 maxCharge 的方法。
     */
    @Column(name = "max_charge", nullable = false)
    public Integer getMaxCharge() {
        return this.maxCharge;
    }

    /**
     * @param maxCharge 对域 maxCharge 的设置方法.
     */
    public void setMaxCharge(Integer maxCharge) {
        this.maxCharge = maxCharge;
    }

    /**
     * @return Long 取得域 chargePeriod 的方法。
     */
    @Column(name = "charge_period", nullable = false)
    public Long getChargePeriod() {
        return this.chargePeriod;
    }

    /**
     * @param chargePeriod 对域 chargePeriod 的设置方法.
     */
    public void setChargePeriod(Long chargePeriod) {
        this.chargePeriod = chargePeriod;
    }

    /**
     * @return Long 取得域 periodUnit 的方法。
     */
    @Column(name = "period_unit", nullable = false)
    public Long getPeriodUnit() {
        return this.periodUnit;
    }

    /**
     * @param periodUnit 对域 periodUnit 的设置方法.
     */
    public void setPeriodUnit(Long periodUnit) {
        this.periodUnit = periodUnit;
    }

    /**
     * @return Date 取得域 createdAt 的方法。
     */
    @Column(name = "created_at", nullable = false)
    public Date getCreatedAt() {
        return this.createdAt;
    }

    /**
     * @param createdAt 对域 createdAt 的设置方法.
     */
    public void setCreatedAt(Date createdAt) {
        this.createdAt = createdAt;
    }

    /**
     * @return String 取得域 createdBy 的方法。
     */
    @Column(name = "created_by")
    public String getCreatedBy() {
        return this.createdBy;
    }

    /**
     * @param createdBy 对域 createdBy 的设置方法.
     */
    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }

    /**
     * @return Date 取得域 changeAt 的方法。
     */
    @Column(name = "changed_at", nullable = false)
    public Date getChangedAt() {
        return this.changedAt;
    }

    /**
     * @param changedAt 对域 changeAt 的设置方法.
     */
    public void setChangedAt(Date changedAt) {
        this.changedAt = changedAt;
    }

    /**
     * @return String 取得域 changeBy 的方法。
     */
    @Column(name = "changed_by")
    public String getChangedBy() {
        return this.changedBy;
    }

    /**
     * @param changedBy 对域 changeBy 的设置方法.
     */
    public void setChangedBy(String changedBy) {
        this.changedBy = changedBy;
    }

    /**
     * @return String 取得域 chargeDesc 的方法。
     */
    @Column(name = "charge_desc", nullable = false)
    public String getChargeDesc() {
        return this.chargeDesc;
    }

    /**
     * @param chargeDesc 对域 chargeDesc 的设置方法.
     */
    public void setChargeDesc(String chargeDesc) {
        this.chargeDesc = chargeDesc;
    }

}
